home *** CD-ROM | disk | FTP | other *** search
/ Power CD / Power CD ATARI-Rechner Lieben.iso / UTILITY / PROFILER / TALER.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-06-16  |  5.3 KB  |  169 lines

  1. PROGRAM Erbteilung; { 7. Bundeswettbewerb Informatik 1988/1989 }
  2.                     { 1. Runde, Aufgabe 3 ; Autor M. Berger    }
  3.                     {     Bitte Hinweise am Ende beachten !    }
  4.  
  5. CONST Max_Anzahl_Goldstuecke  = 100;
  6.       Max_Anzahl_Erben        = 10;
  7.       
  8. TYPE  Geldkiste          = ARRAY [1..Max_Anzahl_Goldstuecke] OF
  9.                                  INTEGER;
  10.  
  11. VAR   Goldstuecke        : Geldkiste; 
  12.       Anzahl_Goldstuecke : INTEGER;
  13.       Anzahl_Erben       : INTEGER;
  14.       
  15.   PROCEDURE Eingabe;
  16.     BEGIN
  17.       CLRSCR;WRITELN('Erbteilung  (bwINF 7 [88/89];Aufgabe 2)');WRITELN;
  18.       WRITELN;WRITE('  Bitte Anzahl Erben(Erbinnen) eingeben : ');
  19.       REPEAT
  20.         READLN(Anzahl_Erben);
  21.       UNTIL Anzahl_Erben<Max_Anzahl_Erben;
  22.       WRITELN;WRITELN('  Bitte Werte der Münzen eingeben (Ende mit <RETURN>)');
  23.       Anzahl_Goldstuecke:=0;
  24.       REPEAT
  25.         Anzahl_Goldstuecke:=Anzahl_Goldstuecke+1;
  26.         WRITE('     ->');
  27.         READLN(Goldstuecke[Anzahl_Goldstuecke]);
  28.       UNTIL (Goldstuecke[Anzahl_Goldstuecke]=0) OR 
  29.             (Anzahl_Goldstuecke>Max_Anzahl_Goldstuecke);
  30.       Anzahl_Goldstuecke:=Anzahl_Goldstuecke-1;
  31.       WRITELN;WRITELN;CLRSCR;
  32.     END;
  33.     
  34.   PROCEDURE Aufteilung;
  35.           
  36.     VAR i,u                : INTEGER;
  37.         jeder_erbt         : INTEGER;
  38.         Akt_Erbe           : INTEGER;
  39.         Ergebniss_gefunden : BOOLEAN;
  40.         HILFSarray         : Geldkiste;
  41.     
  42.     FUNCTION ermittle_durchschnittl_Erbe : REAL;
  43.       VAR i         : INTEGER;
  44.           hilfsumme : REAL;
  45.       BEGIN
  46.         hilfsumme:=0;
  47.         FOR i:=1 TO Anzahl_Goldstuecke DO
  48.         BEGIN
  49.           hilfsumme:=hilfsumme+Goldstuecke[i];
  50.         END;
  51.         hilfsumme:=hilfsumme/Anzahl_Erben;
  52.         ermittle_durchschnittl_Erbe:=hilfsumme;
  53.       END;
  54.       
  55.     PROCEDURE teste (Uebrige    : Geldkiste;
  56.                      Genommene  : Geldkiste;
  57.                      Anz_Genomm : INTEGER;
  58.                      Summe      : INTEGER;
  59.                      Stelle     : INTEGER);
  60.      
  61.       VAR  i    : INTEGER;
  62.            Zahl : INTEGER;
  63.       
  64.       PROCEDURE Ausgabe;
  65.         VAR i,u : INTEGER;
  66.         BEGIN
  67.           WRITELN('Es erbt Erbe Nr. ',akt_Erbe,' die Münzen :  ');
  68.           WRITE('  ');
  69.           FOR i:=1 TO Anz_Genomm DO
  70.           BEGIN
  71.             IF i>1 THEN WRITE(',');
  72.             WRITE(Genommene[i]);
  73.           END;
  74.           WRITELN('.  Summe = ',Summe);WRITELN;
  75.           FOR i:=1 TO Anzahl_Goldstuecke DO
  76.             Goldstuecke[i]:=Uebrige[i];
  77.         END;
  78.       
  79.       BEGIN
  80.         Zahl:=Uebrige[Stelle];
  81.         IF NOT(Ergebniss_Gefunden) THEN
  82.         BEGIN
  83.           Summe:=Summe+Zahl;
  84.           IF Summe<=jeder_erbt THEN
  85.           BEGIN
  86.             Uebrige[Stelle]:=0;
  87.             Anz_Genomm:=Anz_Genomm+1;
  88.             Genommene[Anz_Genomm]:=Zahl;
  89.             IF Summe<jeder_erbt THEN
  90.             BEGIN
  91.               FOR i:=Stelle+1 TO Anzahl_Goldstuecke DO
  92.                 IF Uebrige[i]>0 THEN
  93.                   teste(Uebrige,Genommene,Anz_Genomm,Summe,i);
  94.             END
  95.             ELSE
  96.             BEGIN
  97.               Ergebniss_gefunden:=TRUE;
  98.               Ausgabe;
  99.             END;
  100.           END;
  101.         END;
  102.       END;
  103.     
  104.     BEGIN
  105.       IF ermittle_durchschnittl_Erbe=INT(ermittle_durchschnittl_Erbe) THEN
  106.       BEGIN
  107.         jeder_erbt:=ROUND(ermittle_durchschnittl_Erbe);
  108.         Akt_Erbe:=0;
  109.         REPEAT
  110.           Akt_Erbe:=Akt_Erbe+1;
  111.           Ergebniss_gefunden:=FALSE;
  112.           u:=0;
  113.           FOR i:=1 TO Anzahl_Goldstuecke DO
  114.             u:=u+Goldstuecke[i];
  115.           IF u>=jeder_erbt THEN
  116.           BEGIN
  117.             i:=0; 
  118.             REPEAT
  119.               i:=i+1;
  120.             UNTIL Goldstuecke[i]>0;
  121.             teste(Goldstuecke,HILFSarray,0,0,i);
  122.           END;
  123.         UNTIL (Ergebniss_gefunden=FALSE) OR (Akt_Erbe=Anzahl_Erben);
  124.         IF Ergebniss_gefunden=FALSE THEN
  125.         BEGIN
  126.           WRITELN;WRITE(' Erbe Nr. ',Akt_Erbe,' würde nicht das richtige ');
  127.           WRITE('Erbe erhalten. Es erbt das Kloster. ');
  128.         END;
  129.       END
  130.       ELSE
  131.       BEGIN
  132.         WRITELN;WRITELN(' Eine Aufteilung geht nicht. Das Kloster erbt. ');
  133.       END;
  134.     END;
  135.   
  136.   BEGIN
  137.     Eingabe;
  138.     Aufteilung;
  139.   END.
  140.  
  141. {
  142.  Problemstellung :
  143.  
  144.  Die Baronin von Birlinghoven hat ihren beiden Töchtern eine Truhe voller
  145.  Goldmünzen hinterlassen. Ihr Testament bestimmt, daß das Gold einem benach-
  146.  barten Kloster zukommt, falls es den Töchtern nicht gelingt, den Ihnalt der
  147.  Truhe wertmäßig genau in zwei Hälften aufzuteilen. Die Goldmünzen haben nur
  148.  ganzzahlige Werte.
  149.  Eine Truhe Goldmünzen mit den Werten 1,9,5,3,8 Taler könnten die
  150.  Töchter in die Hälften 1,9,3 Taler und 5,8 Taler teilen.
  151.  Eine Truhe Goldmünzen mit den Werten 1,9,7,3,8 Taler fiele an das Kloster,
  152.  weil die Aufteilung nicht möglich ist.
  153.  Schreibe ein Programm, das bei Eingabe einer Folge ganzer Zahlen für die in
  154.  der Truhe vorkommenden Werte die Erbteile genau aufzählt, andernfalls das 
  155.  Erbe dem Kloster zuspricht, falls eine Aufteilung nicht möglich ist.
  156.  
  157.  Beispiel :
  158.   
  159.   Münzwerte : 17,3,7,6,8,10,10,5,5,4,10,9,8
  160.   Erbinnen  : 2
  161.   Ergebnis  : Erbin 1 erbt 51 Taler, nämlich 17,3,7,6,8,10
  162.                     2      51                10,5,4,10,9,8
  163.                     
  164.  Besonderheiten :
  165.  
  166.   Rekursion
  167.   
  168. }